home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
SGI Developer Toolbox 6.1
/
SGI Developer Toolbox 6.1 - Disc 4.iso
/
src
/
exampleCode
/
smoke
/
uLinMath.h
< prev
next >
Wrap
C/C++ Source or Header
|
1994-08-01
|
4KB
|
140 lines
/* uLinMath.h */
#ifndef _ULINMATH_H_
#define _ULINMATH_H_ 1
/*
* Copyright (c) 1993, 1994, Silicon Graphics, Inc.
*
* Permission to use, copy, modify, distribute, and sell this software
* and its documentation for any purpose is hereby granted without
* fee, provided that (i) the above copyright notices and this
* permission notice appear in all copies of the software and related
* documentation, and (ii) the name of Silicon Graphics may not be
* used in any advertising or publicity relating to the software
* without the specific, prior written permission of Silicon Graphics.
*
* THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
* EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
* WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
*
* IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR ANY SPECIAL,
* INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY
* DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
* WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY
* THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE
* OR PERFORMANCE OF THIS SOFTWARE.
*
*/
#include "uSmoke.h"
#define FloatIsNonZero(f) ((f<1.0e-37)?0:1)
#define uMAX(a,b) (a < b)?b:a
#define uMIN(a,b) (a > b)?b:a
#define uABSlt(a,b) ((a)<(b) && -(a)<(b))
#define uCopyVec2(d,s) d[0]=s[0]; d[1]=s[1]
#define uCopyVec3(d,s) d[0]=s[0]; d[1]=s[1]; d[2]=s[2]
#define uCopyVec4(d,s) (d)[0]=(s)[0]; (d)[1]=(s)[1]; (d)[2]=(s)[2]; (d)[3]=(s)[3]
#define uSetVec2(d,x,y) d[0]=(x); d[1]=(y)
#define uSetVec3(d,x,y,z) d[0]=(x); d[1]=(y); d[2]=(z)
#define uSetVec4(d,x,y,z,w) d[0]=(x); d[1]=(y); d[2]=(z); d[3]=(w)
#define uAddVec3(d,v1,v2) d[0]=v1[0]+v2[0];d[1]=v1[1]+v2[1];d[2]=v1[2]+v2[2]
#define uSubVec3(d,v1,v2) d[0]=v1[0]-v2[0];d[1]=v1[1]-v2[1];d[2]=v1[2]-v2[2]
#define uScaleVec3(d,_s,v) d[0]=(_s)*v[0]; d[1]=(_s)*v[1]; d[2]=(_s)*v[2]
#define uAddScaledVec3(d,v1,_s,v2) \
d[0]=v1[0]+(_s)*v2[0];d[1]=v1[1]+(_s)*v2[1];d[2]=v1[2]+(_s)*v2[2]
#define uDotVec3(v1,v2) (v1[0]*v2[0]+v1[1]*v2[1]+v1[2]*v2[2])
#define uLengthVec3(v) sqrtf(uDotVec3(v,v))
#define uMakeTransMat(_dst, _x, _y, _z) \
(_dst)[0][0] = 1; \
(_dst)[0][1] = 0; \
(_dst)[0][2] = 0; \
(_dst)[0][3] = 0; \
(_dst)[1][0] = 0; \
(_dst)[1][1] = 1; \
(_dst)[1][2] = 0; \
(_dst)[1][3] = 0; \
(_dst)[2][0] = 0; \
(_dst)[2][1] = 0; \
(_dst)[2][2] = 1; \
(_dst)[2][3] = 0; \
(_dst)[3][0] = (_x); \
(_dst)[3][1] = (_y); \
(_dst)[3][2] = (_z); \
(_dst)[3][3] = 1;
#define uMakeScaleMat(_dst, _s1, _s2, _s3) \
(_dst)[0][0] = (_s1); \
(_dst)[0][1] = 0; \
(_dst)[0][2] = 0; \
(_dst)[0][3] = 0; \
(_dst)[1][0] = 0; \
(_dst)[1][1] = (_s2); \
(_dst)[1][2] = 0; \
(_dst)[1][3] = 0; \
(_dst)[2][0] = 0; \
(_dst)[2][1] = 0; \
(_dst)[2][2] = (_s3); \
(_dst)[2][3] = 0; \
(_dst)[3][0] = 0; \
(_dst)[3][1] = 0; \
(_dst)[3][2] = 0; \
(_dst)[3][3] = 1;
#define uSetMatRowVec3(_m, _r, _v) \
(_m)[(_r)][0] = (_v)[0]; \
(_m)[(_r)][1] = (_v)[1]; \
(_m)[(_r)][2] = (_v)[2];
/* m = I */
#define uMakeIdentMat(m)\
m[0][0] = 1.0f;\
m[0][1] = 0.0f;\
m[0][2] = 0.0f;\
m[0][3] = 0.0f;\
m[1][0] = 0.0f;\
m[1][1] = 1.0f;\
m[1][2] = 0.0f;\
m[1][3] = 0.0f;\
m[2][0] = 0.0f;\
m[2][1] = 0.0f;\
m[2][2] = 1.0f;\
m[2][3] = 0.0f;\
m[3][0] = 0.0f;\
m[3][1] = 0.0f;\
m[3][2] = 0.0f;\
m[3][3] = 1.0f;
#define _SQUARE(a) ((a)*(a))
#define _ETA 1.0e-5f
#define _HUGEVAL 3.40282347e+37f
float uNormalizeVec3(uVec3 vec);
void uCrossVec3(uVec3 dst, const uVec3 v1, const uVec3 v2);
void uXformVec3(uVec3 dst, const uVec3 v, const uMatrix m);
void uTransposeMat(uMatrix dst, const uMatrix m);
void uSinCos(float d,float *s, float *c);
void uMakeRotMat(uMatrix m, float degrees, float x, float y, float z);
void uPostMultMat(uMatrix dst, const uMatrix m);
void uMakeRotOntoMat(uMatrix m, const uVec3 v1, const uVec3 v2);
void uXformPt3(uVec3 dst, const uVec3 v, const uMatrix m);
#endif /* _ULINMATH_H_ */